#盒状滤波是最简单的平滑空间滤波方法之一
#使用3×3,5×5,9×9盒状滤波器对图像进行盒状滤波的代码如下：
import numpy as np
from scipy import signal
from skimage import data
from matplotlib import pyplot as plt
#定义二维灰度图像的空间滤波函数
def correl2d(img,window):
    #使用滤波器实现图像的空间相关
    #mode = 'same' 表示输出尺寸对于输入尺寸
    #boundary='fill' 表示滤波前，用常量值填充原始图像的边缘，默认常量值为0
    s = signal.correlate2d(img,window,mode = 'same',boundary='fill')
    return s.astype(np.uint8)

#img 为原始图像
img = data.camera()
#3×3盒状滤波模板
window1 = np.ones((3,3)) / (3**2)
#5×5盒状滤波模板
window2 = np.ones((5,5)) / (5**2)
#9×9盒状滤波模板
window3 = np.ones((9,9)) / (9**2)

#生成滤波效果
new_img1 = correl2d(img,window1)
new_img2 = correl2d(img,window2)
new_img3 = correl2d(img,window3)

#显示图像
plt.figure()
plt.imshow(img,cmap = 'gray') #显示原始图像
plt.figure()
plt.imshow(new_img1,cmap = 'gray') #显示3×3盒状滤波结果
plt.figure()
plt.imshow(new_img2,cmap = 'gray') #显示5×5盒状滤波结果
plt.figure()
plt.imshow(new_img3,cmap = 'gray') #显示9×9盒状滤波结果


'图像经过盒状滤波处理，变得越来越模糊，也就是更加的平滑了，这就是滤波结果'